// 演示混入 可以抽取多个vue组件对象里的共同部分 然后在组件里面

export const itemListenerMixin = {
  data() {
    return {
      itemImgListener: null
    }
  },
  mounted() {

    // 封装一个防抖动函数 delay秒里面只执行一次func
    function debounce(func, delay) {
      let timer = null;
      
      return function (...args) {
        if (timer)
        clearTimeout(timer);
        timer = setTimeout(() => {
          // 不需要改变this指向
          func.apply(null,args);
        }, delay);
      }
    }
  
    // 每次监听到一张图片加载完成之后就刷新betterscroll 会影响性能
    // 对监听的函数做个保存 方便后面取消监听
    this.itemImgListener = debounce(this.$refs.scroll.refresh, 2000)  

    // 监听孙子组件 goodlistitem里面的图片加载完成
    // this.$bus.on()第二个参数是一个方法名 不加括号， 但会被执行 
    // 相当于debounce(this.$refs.scroll.refresh, 2000)()执行的是return的function
    this.$bus.$on("itemload", this.itemImgListener);
     console.log('mixin执行了');
  },
}

// 这个home组件和detail组件都可以用  只是演示一下
export const BacktopMixin = {
  methods: {
    backTopClick() {
      // this.$refs.scroll拿到的是scroll.vue里面的vue对象 再调用里面的scrollto方法
      this.$refs.scroll.scrollTo(0, 0, 1500);
    },
  },
  data() {
    return {
      isShowBackTop: false
    }
  },
}

import {POP,NEW,SELL} from 'common/const.js'
export const tabControlMixin = {
  data() {
    return {
      // 引用的组件里面必须先导入const.js
      currentType: POP
    }
  },
  methods: {
    tabClick(index) {
      switch (index) {
        case 0:
          this.currentType = POP
          break
        case 1:
          this.currentType = NEW
          break
        case 2:
          this.currentType = SELL
          break
      }
      console.log(this.currentType);
    }
  },
}
